package com.zuoban.storage.service;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.file.FileNameUtil;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.Objects;

/**
 * @BelongsProject: zuoban-boot
 * @BelongsPackage: com.zuoban.storage.service
 * @Author: zxy
 * @CreateTime: 2022-10-10
 * @Description: ...
 */
public interface StorageService {


    /**
     * 生成新文件名
     */
    default public String getNewFileName(String fileName) {
        // 获取文件名 不带后缀
        String prefix = FileNameUtil.getPrefix(fileName);
        // 获取后缀
        String suffix = FileNameUtil.getSuffix(fileName);
        // 转换时间作为新文件名拼接（这里也可以用雪花id或者uuid 看业务需求）
        return prefix + "_" + DateUtil.timeToSecond(DateUtil.formatDateTime(new Date())) + "_" + suffix;
    }

    /**
     * 生成新路径
     */
    default public String getNewPath(String... prefix) {
        // 文件路径
        String path = DateUtil.format(new Date(), "yyyyMMdd");

        if (!Objects.isNull(prefix)) {
            path = String.join("/", prefix) + path;
        }
        return path;
    }

    /**
     * 根据文件名生成新文件路径
     */
    default public String getNewPath(String fileName) {
        return getNewPath() + "/" + getNewFileName(fileName);
    }

    /**
     * 文件上传
     * return http地址
     */
    default String upload(byte[] data, String path){
        return upload(new ByteArrayInputStream(data),path);
    }

    /**
     * 流上传
     */
    String upload(InputStream inputStream, String path);
}
